home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / ldapjdk.jar / netscape / ldap / LDAPUrl.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-04-13  |  4.7 KB  |  359 lines

  1. package netscape.ldap;
  2.  
  3. import java.net.MalformedURLException;
  4. import java.util.Enumeration;
  5. import java.util.NoSuchElementException;
  6. import java.util.StringTokenizer;
  7. import java.util.Vector;
  8.  
  9. public class LDAPUrl {
  10.    public static String defaultFilter = "(objectClass=*)";
  11.    private String hostName;
  12.    private int portNumber;
  13.    // $FF: renamed from: DN java.lang.String
  14.    private String field_0;
  15.    private Vector attributes;
  16.    private int scope;
  17.    private String filter;
  18.    private String URL;
  19.  
  20.    public LDAPUrl(String var1) throws MalformedURLException {
  21.       StringTokenizer var2 = new StringTokenizer(var1, ":/?", true);
  22.       String var4 = null;
  23.       this.attributes = null;
  24.       this.scope = 0;
  25.       this.filter = defaultFilter;
  26.       this.URL = var1;
  27.  
  28.       try {
  29.          String var3 = var2.nextToken();
  30.          if (!var3.equalsIgnoreCase("LDAP")) {
  31.             throw new MalformedURLException();
  32.          }
  33.  
  34.          var2.nextToken();
  35.          var2.nextToken();
  36.          var2.nextToken();
  37.          var3 = var2.nextToken();
  38.          if (var3.equals("/")) {
  39.             this.hostName = null;
  40.             this.portNumber = 389;
  41.          } else {
  42.             this.hostName = var3;
  43.             if (var2.countTokens() == 0) {
  44.                this.portNumber = 389;
  45.                return;
  46.             }
  47.  
  48.             var3 = var2.nextToken();
  49.             if (var3.equals(":")) {
  50.                this.portNumber = Integer.parseInt(var2.nextToken());
  51.                if (var2.countTokens() == 0) {
  52.                   return;
  53.                }
  54.  
  55.                var2.nextToken();
  56.             } else {
  57.                this.portNumber = 389;
  58.             }
  59.          }
  60.  
  61.          if (var2.countTokens() == 0) {
  62.             return;
  63.          }
  64.  
  65.          this.field_0 = decode(var2.nextToken());
  66.          if (this.field_0.equals("?")) {
  67.             this.field_0 = "";
  68.          } else if (this.field_0.equals("/")) {
  69.             throw new MalformedURLException();
  70.          }
  71.  
  72.          if (var2.hasMoreTokens()) {
  73.             Object var5 = null;
  74.             String var9 = this.readNextConstruct(var2);
  75.             if (var9 != null && this.isAttribute(var9)) {
  76.                if (var9.equals("?")) {
  77.                   var4 = null;
  78.                   var9 = var2.nextToken();
  79.                } else {
  80.                   var4 = decode(var9);
  81.                   var9 = this.readNextConstruct(var2);
  82.                }
  83.             }
  84.  
  85.             if (var9 != null && (this.scope = this.getScope(var9)) != -1) {
  86.                var9 = this.readNextConstruct(var2);
  87.             } else if (var9 != null && var9.equals("?")) {
  88.                this.scope = 0;
  89.                var9 = var2.nextToken();
  90.             } else {
  91.                this.scope = 0;
  92.             }
  93.  
  94.             if (var9 != null && var9.startsWith("(") && true) {
  95.                this.filter = decode(var9);
  96.                this.readNextConstruct(var2);
  97.             }
  98.          }
  99.       } catch (NumberFormatException var6) {
  100.          throw new MalformedURLException();
  101.       }
  102.  
  103.       if (var4 != null) {
  104.          StringTokenizer var10 = new StringTokenizer(var4, ", ");
  105.          this.attributes = new Vector();
  106.  
  107.          while(var10.hasMoreTokens()) {
  108.             this.attributes.addElement(var10.nextToken());
  109.          }
  110.       }
  111.  
  112.    }
  113.  
  114.    public LDAPUrl(String var1, int var2, String var3) {
  115.       if (var1 != null) {
  116.          if (var2 != 389) {
  117.             this.URL = "LDAP://" + var1 + ":" + var2 + "/" + encode(var3);
  118.          } else {
  119.             this.URL = "LDAP://" + var1 + "/" + encode(var3);
  120.          }
  121.       } else {
  122.          this.URL = "LDAP:///" + encode(var3);
  123.       }
  124.  
  125.       this.hostName = var1;
  126.       this.field_0 = var3;
  127.       this.portNumber = var2;
  128.       this.filter = defaultFilter;
  129.       this.attributes = null;
  130.       this.scope = 0;
  131.    }
  132.  
  133.    public LDAPUrl(String var1, int var2, String var3, String[] var4, int var5, String var6) {
  134.       if (var4 == null) {
  135.          this.initialize(var1, var2, var3, (Enumeration)null, var5, var6);
  136.       } else {
  137.          Vector var7 = new Vector();
  138.  
  139.          for(int var8 = 0; var8 < var4.length; ++var8) {
  140.             var7.addElement(var4[var8]);
  141.          }
  142.  
  143.          this.initialize(var1, var2, var3, var7.elements(), var5, var6);
  144.       }
  145.    }
  146.  
  147.    public LDAPUrl(String var1, int var2, String var3, Enumeration var4, int var5, String var6) {
  148.       this.initialize(var1, var2, var3, var4, var5, var6);
  149.    }
  150.  
  151.    private void initialize(String var1, int var2, String var3, Enumeration var4, int var5, String var6) {
  152.       this.hostName = var1;
  153.       this.field_0 = var3;
  154.       this.portNumber = var2;
  155.       this.filter = var6 != null ? var6 : defaultFilter;
  156.       this.scope = var5;
  157.       if (var4 != null) {
  158.          this.attributes = new Vector();
  159.  
  160.          while(var4.hasMoreElements()) {
  161.             this.attributes.addElement(var4.nextElement());
  162.          }
  163.       } else {
  164.          this.attributes = null;
  165.       }
  166.  
  167.       StringBuffer var7 = new StringBuffer("LDAP://");
  168.       if (var1 != null) {
  169.          var7.append(var1);
  170.          if (var2 != 389) {
  171.             var7.append(':');
  172.             var7.append(String.valueOf(var2));
  173.          }
  174.       }
  175.  
  176.       var7.append('/');
  177.       var7.append(encode(var3));
  178.       if (var4 != null) {
  179.          var7.append('?');
  180.          Enumeration var8 = this.attributes.elements();
  181.  
  182.          for(boolean var9 = true; var8.hasMoreElements(); var7.append((String)var8.nextElement())) {
  183.             if (!var9) {
  184.                var7.append(',');
  185.             } else {
  186.                var9 = false;
  187.             }
  188.          }
  189.       }
  190.  
  191.       if (var6 != null) {
  192.          if (var4 == null) {
  193.             var7.append('?');
  194.          }
  195.  
  196.          var7.append('?');
  197.          switch (var5) {
  198.             case 0:
  199.             default:
  200.                var7.append("base");
  201.                break;
  202.             case 1:
  203.                var7.append("one");
  204.                break;
  205.             case 2:
  206.                var7.append("sub");
  207.          }
  208.  
  209.          var7.append('?');
  210.          var7.append(var6);
  211.       }
  212.  
  213.       this.URL = var7.toString();
  214.    }
  215.  
  216.    public String getHost() {
  217.       return this.hostName;
  218.    }
  219.  
  220.    public int getPort() {
  221.       return this.portNumber;
  222.    }
  223.  
  224.    public String getDN() {
  225.       return this.field_0;
  226.    }
  227.  
  228.    public Enumeration getAttributes() {
  229.       return this.attributes == null ? null : this.attributes.elements();
  230.    }
  231.  
  232.    public String[] getAttributeArray() {
  233.       if (this.attributes == null) {
  234.          return null;
  235.       } else {
  236.          String[] var1 = new String[this.attributes.size()];
  237.          Enumeration var2 = this.getAttributes();
  238.  
  239.          for(int var3 = 0; var2.hasMoreElements(); var1[var3++] = (String)var2.nextElement()) {
  240.          }
  241.  
  242.          return var1;
  243.       }
  244.    }
  245.  
  246.    public int getScope() {
  247.       return this.scope;
  248.    }
  249.  
  250.    private int getScope(String var1) {
  251.       byte var2 = -1;
  252.       if (var1.equalsIgnoreCase("base")) {
  253.          var2 = 0;
  254.       } else if (var1.equalsIgnoreCase("one")) {
  255.          var2 = 1;
  256.       } else if (var1.equalsIgnoreCase("sub")) {
  257.          var2 = 2;
  258.       }
  259.  
  260.       return var2;
  261.    }
  262.  
  263.    public String getFilter() {
  264.       return this.filter;
  265.    }
  266.  
  267.    public String getUrl() {
  268.       return this.URL;
  269.    }
  270.  
  271.    private boolean isFilter(String var1) {
  272.       return var1.startsWith("(");
  273.    }
  274.  
  275.    private boolean isAttribute(String var1) {
  276.       return !var1.startsWith("(") && !var1.equalsIgnoreCase("base") && !var1.equalsIgnoreCase("one") && !var1.equalsIgnoreCase("sub");
  277.    }
  278.  
  279.    private String readNextConstruct(StringTokenizer var1) throws MalformedURLException {
  280.       try {
  281.          if (var1.hasMoreTokens()) {
  282.             var1.nextToken();
  283.             return var1.nextToken();
  284.          } else {
  285.             return null;
  286.          }
  287.       } catch (NoSuchElementException var2) {
  288.          throw new MalformedURLException();
  289.       }
  290.    }
  291.  
  292.    private static int hexValue(char var0) throws MalformedURLException {
  293.       if (var0 >= '0' && var0 <= '9') {
  294.          return var0 - 48;
  295.       } else if (var0 >= 'A' && var0 <= 'F') {
  296.          return var0 - 65 + 10;
  297.       } else if (var0 >= 'a' && var0 <= 'f') {
  298.          return var0 - 97 + 10;
  299.       } else {
  300.          throw new MalformedURLException();
  301.       }
  302.    }
  303.  
  304.    private static char hexChar(int var0) {
  305.       if (var0 >= 0 && var0 <= 15) {
  306.          return var0 < 10 ? (char)(var0 + 48) : (char)(var0 - 10 + 97);
  307.       } else {
  308.          return 'x';
  309.       }
  310.    }
  311.  
  312.    public static String decode(String var0) throws MalformedURLException {
  313.       StringBuffer var1 = new StringBuffer(var0);
  314.       int var2 = 0;
  315.       int var3 = 0;
  316.  
  317.       try {
  318.          while(var2 < var1.length()) {
  319.             if (var1.charAt(var2) != '%') {
  320.                if (var2 != var3) {
  321.                   var1.setCharAt(var3, var1.charAt(var2));
  322.                }
  323.  
  324.                ++var2;
  325.                ++var3;
  326.             } else {
  327.                var1.setCharAt(var3, (char)(hexValue(var1.charAt(var2 + 1)) << 4 | hexValue(var1.charAt(var2 + 2))));
  328.                ++var3;
  329.                var2 += 3;
  330.             }
  331.          }
  332.       } catch (StringIndexOutOfBoundsException var4) {
  333.          throw new MalformedURLException();
  334.       }
  335.  
  336.       var1.setLength(var3);
  337.       return var1.toString();
  338.    }
  339.  
  340.    public static String encode(String var0) {
  341.       StringBuffer var1 = new StringBuffer(var0.length() + 10);
  342.  
  343.       for(int var2 = 0; var2 < var0.length(); ++var2) {
  344.          char var3 = var0.charAt(var2);
  345.          if ((var3 < 'a' || var3 > 'z') && (var3 < 'A' || var3 > 'Z') && (var3 < '0' || var3 > '9') && "$-_.+!*'(),".indexOf(var3) <= 0) {
  346.             var1.append("%");
  347.             int var4 = (var3 & 240) >> 4;
  348.             var1.append(var4 >= 0 && var4 <= 15 ? (var4 < 10 ? (char)(var4 + 48) : (char)(var4 - 10 + 97)) : 'x');
  349.             var4 = var3 & 15;
  350.             var1.append(var4 >= 0 && var4 <= 15 ? (var4 < 10 ? (char)(var4 + 48) : (char)(var4 - 10 + 97)) : 'x');
  351.          } else {
  352.             var1.append(var3);
  353.          }
  354.       }
  355.  
  356.       return var1.toString();
  357.    }
  358. }
  359.